package com.geek.log4jcontrol.remote;

import java.io.File;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import com.geek.log4jcontrol.core.ConfigHis;
import com.geek.log4jcontrol.core.annotation.OperatePwd;
import com.geek.log4jcontrol.core.annotation.PwdType;

/**
 * @package com.geek.rmi.remote
 * @description Log4jControl 外部控制接口，所有方法都有对应的操作权限和操作码，操作码为各个方法的第一个参数
 * @author Goliath
 * @createTime 2012-7-30 下午01:51:20
 * @modifyTime
 */
@SuppressWarnings("unchecked")
public interface Log4jControlRemote extends Remote {

	/**
	 * @package com.geek.log4jcontrol.remote
	 * @description 获取当前的日志配置
	 * @param operatePwd 操作码
	 * @return 当前的日志配置
	 * @throws RemoteException
	 * @returnType String
	 * @author Goliath
	 * @createTime 2012-8-3 下午02:24:16
	 * @modifyTime
	 */
	@OperatePwd(pwdtype = PwdType.OPERATE)
	public String getCurrentConfig(String operatePwd) throws RemoteException;

	/**
	 * @package com.geek.log4jcontrol.remote
	 * @description 通过文件加载log4j配置
	 * @param operatePwd 操作码
	 * @param filePath 配置文件
	 * @return 操作是否成功 0成功 1 失败  其余为错误编码
	 * @throws RemoteException
	 * @returnType int
	 * @author Goliath
	 * @createTime 2012-8-3 上午10:13:39
	 * @modifyTime
	 */
	@OperatePwd(pwdtype = PwdType.OPERATE)
	public int initConfigByFile(String operatePwd, File configFile) throws RemoteException;

	/**
	 * @package com.geek.log4jcontrol.remote
	 * @description 加载固定文件位置的log4j配置
	 * @param operatePwd 操作码
	 * @param filePath 文件路径
	 * @return 操作是否成功 0成功 1 失败  其余为错误编码
	 * @throws RemoteException
	 * @returnType int
	 * @author Goliath
	 * @createTime 2012-8-3 上午10:13:39
	 * @modifyTime
	 */
	@OperatePwd(pwdtype = PwdType.OPERATE)
	public int initConfigByPath(String operatePwd, String filePath) throws RemoteException;

	/**
	 * @package com.geek.log4jcontrol.remote
	 * @description 通过String对象直接加载log4j配置
	 * @param operatePwd 操作码
	 * @param configStr log4j的配置
	 * @return 操作是否成功 0成功 1 失败  其余为错误编码
	 * @throws RemoteException
	 * @returnType int
	 * @author Goliath
	 * @createTime 2012-8-3 上午10:15:09
	 * @modifyTime
	 */
	@OperatePwd(pwdtype = PwdType.OPERATE)
	public int initConfig(String operatePwd, String configStr) throws RemoteException;

	/**
	 * @package com.geek.log4jcontrol.remote
	 * @description 通过Properties对象直接加载log4j配置
	 * @param operatePwd 操作码
	 * @param properties log4j的配置
	 * @return 操作是否成功 0成功 1 失败  其余为错误编码
	 * @throws RemoteException
	 * @returnType int
	 * @author Goliath
	 * @createTime 2012-8-3 上午10:17:57
	 * @modifyTime
	 */
	@OperatePwd(pwdtype = PwdType.OPERATE)
	public int initConfig(String operatePwd, Properties properties) throws RemoteException;

	/**
	 * @package com.geek.log4jcontrol.remote
	 * @description 获取log4j的历史配置列表
	 * @param operatePwd 操作码
	 * @return log4j的历史配置列表
	 * @throws RemoteException
	 * @returnType List<ConfigHis>
	 * @author Goliath
	 * @createTime 2012-8-3 上午10:19:09
	 * @modifyTime
	 */
	@OperatePwd(pwdtype = PwdType.READ)
	public List<ConfigHis> getConfigList(String operatePwd) throws RemoteException;

	/**
	 * @package com.geek.log4jcontrol.remote
	 * @description 获取log4j的历史配置
	 * @param operatePwd 操作码
	 * @param configCode 配置编码
	 * @return log4j的历史配置
	 * @throws RemoteException
	 * @returnType ConfigHis
	 * @author Goliath
	 * @createTime 2012-8-3 上午10:20:46
	 * @modifyTime
	 */
	@OperatePwd(pwdtype = PwdType.READ)
	public ConfigHis getConfig(String operatePwd, String configCode) throws RemoteException;

	/**
	 * @package com.geek.log4jcontrol.remote
	 * @description 重置配置到某版本 
	 * @param operatePwd 操作码
	 * @param configCode 配置编码
	 * @return 操作是否成功 0成功 1 失败  其余为错误编码
	 * @throws RemoteException
	 * @returnType int
	 * @author Goliath
	 * @createTime 2012-8-3 上午10:22:11
	 * @modifyTime
	 */
	@OperatePwd(pwdtype = PwdType.OPERATE)
	public int resetConfig(String operatePwd, String configCode) throws RemoteException;

	/**
	 * @package com.geek.log4jcontrol.remote
	 * @description 获取日志---文件形式
	 * @param operatePwd 操作码
	 * @param configMap 日志获取的具体配置参数
	 * @return 日志文件
	 * @throws RemoteException
	 * @returnType File
	 * @author Goliath
	 * @createTime 2012-8-3 上午10:21:39
	 * @modifyTime
	 */
	@OperatePwd(pwdtype = PwdType.LOG)
	public File getLog(String operatePwd, Map configMap) throws RemoteException;

	/**
	 * @package com.geek.log4jcontrol.remote
	 * @description 获取日志---日志信息
	 * @param operatePwd 操作码
	 * @param configMap 日志获取的具体配置参数
	 * @return 日志信息
	 * @throws RemoteException
	 * @returnType String
	 * @author Goliath
	 * @createTime 2012-8-9 下午03:27:13
	 * @modifyTime
	 */
	@OperatePwd(pwdtype = PwdType.LOG)
	public String getLogStr(String operatePwd, Map configMap) throws RemoteException;

}
